/*
 * @(#)CommonDao.java
 *
 * Copyright 2012 by ShenY BIS, All rights reserved.
 */

package com.bis.common.dao;

import java.util.List;
import java.util.Map;

import com.bis.common.entity.SystemEntity;
import com.bis.framework.base.dao.BaseEnityDao;
import com.bis.framework.base.entity.BaseEntity;
import com.bis.framework.entity.UserEntity;
import com.bis.framework.util.common.Page;
import com.bis.framework.util.common.PageData;

/**
 * CommonDao
 * 
 * @author BIS 2012-12-24
 */
public interface CommonDao extends BaseEnityDao<BaseEntity>
{

    /**
     * setNameSpace
     * @Description:
     * @param nameSpace
     */
    public void setNameSpace(String nameSpace);

    /**
     * 设置存储过程命名空间
     * @Description:
     * @param nameSpaceAndId
     */
    public void setNameSpaceAndId(String nameSpaceAndId);

    /**
     * 1.保存实体类数据。
     * @Description:
     * @param obj
     * @throws Exception
     */
    public void saveObj(BaseEntity obj) throws Exception;

    /**
     * 2.保存实体类列表数据。
     * @Description:
     * @param lstObj
     * @throws Exception
     */
    public void saveObj(List<BaseEntity> lstObj) throws Exception;

    /**
     * 3.更新实体类数据。
     * @Description:
     * @param sql
     * @throws Exception
     */
    public void updateObj(String sql) throws Exception;

    /**
     * 3-1.更新实体类列表数据。
     * @Description:
     * @param lstObj
     * @throws Exception
     */
    public void updateObj(final List<BaseEntity> lstObj) throws Exception;

    /**
     * 12.对数据记录Count进行验证。
     * @Description:
     * @param sql
     * @return
     */
    public Integer checkNameDuplication(String sql);

    /**
     * 5.根据实体类主键进行数据删除。
     * @Description:
     * @param sql
     */
    public void deleteObjById(String sql);

    /**
     * 6.根据实体类数据列表主键进行数据删除。
     * @Description:
     * @param lstObj
     * @throws Exception
     */
    public void deleteObjById(final List<BaseEntity> lstObj) throws Exception;

    /**
     * 13.根据条件列表用存储过程进行数据分页查询。
     * @Description:
     * @param page
     * @param map
     * @return
     */
    public PageData selectByProc(Page page, Map map);

    /**
     * 14.根据条件列表用存储过程进行数据查询。
     * @Description:
     * @param map
     * @return
     */
    public List selectByProc(Map map);

    /**
     * 查询用户信息。
     * @Description:
     * @param sql
     * @return
     */
    public List<UserEntity> selectForUser(String sql);

    /**
     * 查询用户信息。
     * @Description:
     * @param sql
     * @return
     */
    public List<UserEntity> selectForHandleUser(String sql);

    /**
     * 查询机构信息。
     * @Description:
     * @param string
     * @return
     */
    public List<SystemEntity> selectForCompany(String string);

}
